package service

import (
	"strings"
)

type ConfigPart struct {
	Name     string
	EntryMap map[string]string
}

func CreateConfigPart(tag string, path string) (p *ConfigPart) {
	entryMap := map[string]string{"path": path}
	pName := "[" + tag + "]"
	p = &ConfigPart{
		Name:     pName,
		EntryMap: entryMap,
	}
	return p
}

func (p *ConfigPart) AddEntry(k, v string) {
	p.EntryMap[k] = v
}

func (p *ConfigPart) AddGlobal() (pg ConfigPart) {
	p.Name = "[global]"
	p.AddEntry("security", "user")
	p.AddEntry("passdb backend", "tdbsam")
	return *p
}

// 以下删除writer的两个函数

func (p *ConfigPart) RemoveWriter(delUserList []string) {
	//定义一个新用户列表
	var userNewList []string
	//从配置中分离原用户列表
	userList := strings.Split(p.EntryMap["write list"], ",")
	//遍历原用户列表
	for _, u := range userList {
		tag := true
		//遍历要删除的用户列表，判断原用户是否保留
		for _, du := range delUserList {
			//如果用户名在删除列表中，则标记为删除
			if u == du {
				tag = false
			}
		}
		//如果标签是保留，则加入新用户列表
		if tag {
			userNewList = append(userNewList, u)
		}
	}
	//用新用户列表覆盖源用户列表
	p.EntryMap["write list"] = strings.Join(userNewList, ",")
}

func (p *ConfigPart) AddWriter(addUserList []string) {
	//从配置中分离原用户列表
	userList := strings.Split(p.EntryMap["write list"], ",")
	newWriterList := userList
	//遍要添加的用户列表
	for _, au := range addUserList {
		tag := true
		//遍历原用户列表
		for _, u := range userList {
			//如果存在要添加的用户则退出循环
			if au == u {
				tag = false
				break
			}
		}
		//如果标签是保留，则加入新用户列表
		if tag {
			newWriterList = append(newWriterList, au)
		}
	}
	//用新用户列表覆盖源用户列表
	p.EntryMap["write list"] = strings.Join(newWriterList, ",")
	//将修改后的目录配置覆盖原目录配置
}
